package com.nowcoder.community.util;

import com.nowcoder.community.entity.User;
import org.springframework.stereotype.Component;

/**
 * 持有用户信息
 * 代替session 对象
 * ThreadLocal 线程局部变量
 * 使用session存在共享数据的问题。
 * 将共享数据存入数据库，所有的应用服务器都去数据库获取共享数据。
 * 对于每一次请求，开始时从数据库里取到数据，然后将其临时存放在本地的内存里.考虑到线程之间的隔离，所以用ThreadLocal，
 * 这样在本次请求的过程中，就可以随时获取到这份共享数据了。所以，session的替代方案是数据库，ThreadLocal只是打了个辅助。
 */
@Component
public class HostHolder {
    private ThreadLocal<User> users = new ThreadLocal<>();

    public void setUser(User user){
        users.set(user);
    }

    public User getUser(){
        return users.get();
    }

    public void clear(){
        users.remove();
    }

}
